package com.zc.medium.No3;

/**
 * @program: leetCode_Exercise
 * @author: zhangcong
 * @create: 2019-09-12 16:36
 * @description: 无重复字符的最长子串
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 * 示例 1:
 * <p>
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 * 示例 2:
 * <p>
 * 输入: "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 * 示例 3:
 * <p>
 * 输入: "pwwkew"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
 *      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
 **/
public class Solution {
    /**
     *   暴力遍历
     */
    public static int lengthOfLongestSubstring(String s) {
        int maxLen=0;
        StringBuffer sb=new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            String str = s.substring(i, i + 1);
            //计算当前字符是否出现过。
            int index = sb.indexOf(str);
            if(index>-1){
               String s2 =sb.length()-1>index ? sb.substring(index+1, sb.length())+str:str;
                sb=new StringBuffer();
                sb.append(s2);
            }else{
                sb.append(s.charAt(i));
            }
            maxLen=Math.max(maxLen,sb.length());
        }
        return maxLen;
    }

    /**
     *  TODO 更优的算法
     */
    public static int lengthOfLongestSubstring1(String s) {
        char[] charArray = s.toCharArray();
        int maxLen=0;
//        for (int i = 0; i < charArray.length; i++) {
//            for(int j=){
//
//            }
//        }
//        map.values().
        return 0;
    }
    public static void main(String[] args) {
        //"pwwkew"  "aabaab!bb"
        String test="dvdf";

        System.out.println(lengthOfLongestSubstring(test));
    }
}
